TELLING (REAL) TIME
by Editors, AAKUG, July 1987

(Accessing the real time clock in '84 Kaypros)

In order to access the real time clock (RTC) provided on Kaypro
4-84, 10-84, and 2X models you will need a language translator
that allows you to "talk" to your computer's i/o ports.  If you
are using MBASIC, these functions are "INP" and "OUT".  Other
languages have similar instructions.

In MBASIC, the following sequence of lines will retrieve a single
clock value:

200 OUT 34,  15
210 OUT 32,  X%
220 A% = INP(36)

where X% equals 9 for the year value, 7 for the month, 6 for the
day of the month, 5 for the day of the week (Sunday is 1), 4 for
the hour (24 hour format), 3 for the minute, 2 for the second and
1 for hundredths of a second.

If you print the value of A% you will find that it looks strange. 
That is because the clock maintains its values in what is called
binary coded decimal.  In binary coded decimal, four bits are
used for each decimal digit, thus the year value of 87 looks like
1000 0111 in binary coded decimal; the first four bits represent
8, the second four 7.  If we treat this value as a normal decimal
integer it comes out as 135, which is obviously wrong.

To convert binary coded decimal to decimal we can do this:

230 A% = (A% \ 16) * 10 + A% MOD 16

or we can mask and shift bits, or we can cheat.  To cheat, we
sneakily convert the retrieved value to a hexadecimal string with
"HEX$" then back to a decimal integer with "VAL".  Line 220 above
should now read:

220 A% = VAL(HEX$(IN6(36)))

Now we can have our way with A%, as it is the correct decimal
value.
